// 用户名
export function isvalidUsername(str) {
    const reg = /^[a-zA-Z0-9]{2,25}$/
    return reg.test(str)
}
// 手机号
export function mobile(str) {
    const reg = /^1[3-9]\d{9}$/;
    return reg.test(str)
}
// 密码
export function isvalidPassword(str) {
    const reg = /^(?![0-9]+$)(?![A-Z]+$)(?![a-z]+$)(?![`~!@#$%^&.*"“”_+<>{}\/'[\]]+$)[0-9|A-Z|a-z|`~!@#$%^&.*_"“”+<>{}\/'[\]]{6,16}$/;
    return reg.test(str)
}
// 汉字
export function CNname(str) {
    const reg = /^[\u4e00-\u9fa5]+$/
    return reg.test(str)
}
//汉字 数字 字母 下划线（不包含特殊字符）
export function notCharmap(str) {
    const reg = /^[\u4e00-\u9fa5\w]+$/
    return reg.test(str)
}
//名称（包含常用字符）
export function commonCharName(str) {
    const reg = /^[|'"\.\[\]【】+*%~()#@!！?？\u4e00-\u9fa5\w-]{2,20}$/
    return reg.test(str)
}
// 空或正整数或0
export function null0to(str) {
    const reg = /^\d*$/
    return reg.test(str)
}
// 数字1-255
export function num1to255(str) {
    const reg = /^(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5]))))$/
    return reg.test(str)
}
// 数字0-99999
export function num0to999(str) {
    const reg = /^\+?[0-9]\d{0,2}(\.\d*)?$/
    return reg.test(str)
}
// 数字1-9999
export function num1to9999(str) {
    const reg = /^\+?[1-9]\d{0,3}(\.\d*)?$/
    return reg.test(str)
}
// 数字1-999999
export function num1to999999(str) {
    const reg = /^\+?[1-9]\d{0,5}(\.\d*)?$/
    return reg.test(str)
}
// 数字0-99999
export function num0to99999(str) {
    const reg = /^\+?[0-9]\d{0,4}(\.\d*)?$/
    return reg.test(str)
}
// 数字0-99999999  八位
export function num0to9999999(str) {
    const reg = /^\+?[0-9]\d{0,7}(\.\d*)?$/
    return reg.test(str)
}
// 数字0-999999
export function num0to999999(str) {
    const reg = /^\+?[0-9]\d{0,5}(\.\d*)?$/
    return reg.test(str)
}
// 数字0-99999带小数
export function num0to99999dot(str) {
    const reg = /^([1-9]\d{0,4}|0)(\.\d{0,2})?$/
    return reg.test(str)
}
// 数字0-9999999带小数
export function num0to9999999dot(str) {
    const reg = /^([1-9]\d{0,6}|0)(\.\d{0,2})?$/
    return reg.test(str)
}
// 数字0.01-9999999带小数
export function greater0to9999999dot(str) {
    if (str / 1 == 0) {
        return false;
    } else {
        const reg = /(^[1-9]([0-9]{0,6})?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
        return reg.test(str)
    }
}
// 数字0.01-999999带小数
export function greater0to999999dot(str) {
    if (str / 1 == 0) {
        return false;
    } else {
        const reg = /(^[1-9]([0-9]{0,5})?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
        return reg.test(str)
    }
}
// -999999.99-0
export function minus0to999999dot(str) {
    if (str * 1 == 0) {
        return true;
    } else {
        const reg = /(^\-[1-9]([0-9]{0,5})?(\.[0-9]{1,2})?$)|(^\-[0-9]\.[0-9]([0-9])?$)/;
        return reg.test(str)
    }
}
// -999999.99-999999.99
export function abs0to999999dot(str) {
    if (str * 1 == 0) {
        return true;
    } else {
        const reg = /(^-?[1-9]([0-9]{0,5})?(\.[0-9]{1,2})?$)|(^\?-[0-9]\.[0-9]([0-9])?$)/;
        return reg.test(str)
    }
}
// 整数0-9999999
export function integer0to9999999(str) {
    const reg = /^([1-9]\d{0,6}|0)$/
    return reg.test(str)
}
// 整数0-999999
export function integer0to999999(str) {
    const reg = /^(0|[1-9]\d{0,5})$/
    return reg.test(str)
}
// 整数1-999999
export function integer1to999999(str) {
    const reg = /^([1-9]\d{0,5})$/
    return reg.test(str)
}
// 整数1-999999999
export function integer1to999999999(str) {
    const reg = /^([1-9]\d{0,8})$/
    return reg.test(str)
}
// 整数1-999
export function integer1to999(str) {
    const reg = /^([1-9]\d{0,2})$/
    return reg.test(str)
}
// 整数1-99
export function integer1to99(str) {
    const reg = /^([1-9]\d?)$/
    return reg.test(str)
}
// 1-x位的整数
export function integer1tox(str, x) {
    var reg = new RegExp(`^([1-9]\\d{0,${x-1}})$`);
    return reg.test(str)
}
// 空或数字0-999999
export function nullto999999(str) {
    const reg = /^(?:[0-9]\d{0,5}|0|)$/
    return reg.test(str)
}
// 数字空或1-255
export function nullOr1to255(str) {
    const reg = /^$|^(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5]))))$/
    return reg.test(str)
}
// 金额
export function money(str) {
    const reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
    return reg.test(str)
}
// x位的金额，包括0
export function money0tox(str, x) {
    var reg = new RegExp(`^([1-9][\\d]{0,${x-1}}|0)(\\.[\\d]{1,2})?$`);
    return reg.test(str)
}
// 可负数的金额
export function money_minus(str) {
    const reg = /^\-?([1-9][\d]{0,7}|0)(\.[\d]{1,2})?$/;
    return reg.test(str)
}
// 0<x<=10,最多两位小数
export function multiple0to10(str) {
    const reg = /^(?!0(\.0{1,2})?$)(\d(\.\d{1,2})?|10)$/;
    return reg.test(str)
}

// 0<x<=10,最多一位小数
export function multiple0to10Yi(str) {
    const reg = /^(?!0(\.0{1,1})?$)(\d(\.\d{1,1})?|10)$/;
    return reg.test(str)
}
//最多两位小数
export function multiple2decimal(str) {
    const reg = /^$|^(([1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/;
    return reg.test(str)
}
/* 合法uri*/
export function validateURL(textval) {
    const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
    return urlregex.test(textval)
}

/* 小写字母*/
export function validateLowerCase(str) {
    const reg = /^[a-z]+$/
    return reg.test(str)
}

/* 大写字母*/
export function validateUpperCase(str) {
    const reg = /^[A-Z]+$/
    return reg.test(str)
}

/* 大小写字母*/
export function validatAlphabets(str) {
    const reg = /^[A-Za-z]+$/
    return reg.test(str)
}

/* 纯数字*/
export function onlyNum(str) {
    const reg = /^\d+$/
    return reg.test(str)
}
/* 正整数*/
export function positiveInt(str) {
    const reg = /^[1-9]\d*$/
    return reg.test(str)
}
/* 数字、-和,*/
export function dotNum(str) {
    const reg = /^[\d,，-]+$/
    return reg.test(str)
}
/* 字母数字下划线和-*/
export function letterNumLine(str) {
    const reg = /^[\w-]+$/
    return reg.test(str)
}
// 字母或数字
export function letterNum(str) {
    const reg = /^[\dA-Za-z]+$/
    return reg.test(str)
}

export function checkNumber(e) {
    let ev = e || event;
    return (/[\d]/.test(String.fromCharCode(ev.keyCode)))
}

//匹配url链接
export function linkName(str) {
    const strRegex = '^((https|http|ftp)://)?'//(https或http或ftp):// 可有可无
        + '(([\\w_!~*\'()\\.&=+$%-]+: )?[\\w_!~*\'()\\.&=+$%-]+@)?' //ftp的user@ 可有可无
        + '(([0-9]{1,3}\\.){3}[0-9]{1,3}' // IP形式的URL- 3位数字.3位数字.3位数字.3位数字
        + '|' // 允许IP和DOMAIN（域名）
        + '(localhost)|'    //匹配localhost
        + '([\\w_!~*\'()-]+\\.)*' // 域名- 至少一个[英文或数字_!~*\'()-]加上.
        + '\\w+\\.' // 一级域名 -英文或数字 加上.
        + '[a-zA-Z]{1,6})' // 顶级域名- 1-6位英文
        + '(:[0-9]{1,5})?' // 端口- :80 ,1-5位数字
        + '((/?)|' // url无参数结尾 - 斜杆或这没有
        + '(/[\\w_!~*\'()\\.;?:@&=+$,%#-]+)+/?)$';//请求参数结尾- 英文或数字和[]内的各种字符
    const re = new RegExp(strRegex, 'i'); // 大小写不敏感
    if (re.test(encodeURI(str))) {
        return true;
    }
    return false;
}
